استفاده از تابع تبدیل تاریخ شمسی به میلادی و
برعکس
استفاده از تابع تبدیل تاریخ شمسی به میلادی و بالعکس
در PHP
برای دریافت توابع کافیست که کد توابع را از این آدرس دریافت کنید
:
http://www.iranphp.net/modules/sections/index.php?op=viewarticle&artid=19
بوسیله یک Copy و Paste متن این توابع را درون یک فایل جدید بنام به
عنوان مثال jalali.php ذخیره کنید .
برای اینکه بتوانید از این توابع در برنامه خود استفاده کنید کافیست
در ابتدای برنامه خود دستور زیر را وارد کنید :
<?php require_once
"jalali.php";?>
با این کار دو تابع با نامهای gregorian_to_jalali و
jalali_to_gregorian در اختیار شما قرار می گیرند که به ترتیب برای
تبدیل تاریخ میلادی به شمسی و شمسی به میلادی مورد استفاده قرار می
گیرند .
برای اینکه بتوانم نحوه استفاده از این دو تابع را شرح دهم به ذکر
مثالهایی در این مورد می پردازم .
1- تبدیل تاریخ میلادی به شمسی
برای این کار باید از تابع gregorian_to_jalali استفاده کنید . این
تابع 3 متغیر را از ورودی دریافت می کند که به ترتیب سال، ماه و
روز می باشد که همگی از نوع عددی می باشند .
برای مثال اگر بخواهیم تاریخ 2002-11-25 را که درون یک متغیر داریم
به شمسی تبدیل کنیم و سپس آنرا درون یک متغیر قرار دهیم ابتدا باید
عناصر تاریخ میلادی رو جدا کنیم . برای این کار می توانیم در دستور
زیر استفاده کنیم :
<?php $gdate='2002-11-25'; list( $gyear, $gmonth, $gday ) = preg_split ( '/-/', $gdate ); ?>
در اینجا از دستور preg_spilit برای جدا کردن عناصر تاریخ $gdate
توسط جداکننده – استفاده کرده ایم . همانطور که می بینید syntax
این دستور به این صورت است که 2 متغیر به عنوان ورودی دریافت می
کند . اولی به عنوان delimiter می باشد که چون می توان به صورت
regex نیز آنرا وارد کرد باید بین دو slash (/) قرار گیرد و متغیر
دوم هم که همان متغییری است که تاریخ میلادی ما در آن قرار دارد .
چون خروجی این دستور یک آرایه است از دستور list استفاده کرده ایم
تا عناصر آرایه را هر کدام در یک متغیر قرار دهیم . هم اکنون روز،
ماه و سال میلادی را هر کدام در یک متغیر داریم . حال می توانیم از
تابع gregorian_to_jalali استفاده کنیم :
<?php list(
$jyear,
$jmonth,
$jday ) =
gregorian_to_jalali($gyear, $gmonth, $gday); ?>
در اینجا مشخص است که 3 متغیر سال، ماه و روز میلادی را به عنوان
متغیر های ورودی تابع grogorian_to_jalali وارد کرده ایم و چون
خروجی این تابع از نوع آرایه است توسط دستور list هر کدام از عناصر
این آرایه را در یک متغیر قرار می دهیم . این متغیر های حاوی
اطلاعات سال، ماه و روز همان تاریخ به شمسی می باشند . برای اینکه
آنها را به صورت قابل نمایش در یک متغیر قرار دهیم می توانیم این
خط را به برنامه اضافه کنیم :
<?php $jdate =
$jyear."/".$jmonth."/".$jday; ?>
در صوتیکه مقدار $jdate را نمایش دهید همان تاریخ از نوع شمسی خواهد
بود که چیزی شبیه به مقدار زیر است :
4/9/1381
حال در صورتیکه بخواهید تاریخ همین لحظه را به صورت شمسی بدست آورید
می توانید از برنامه زیر استفاده کنید :
<?php list($gyear, $gmonth, $gday ) = preg_split ('/-/', date("Y-m-d")); list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($gyear, $gmonth, $gday);
$jdate
= $jyear."/".$jmonth."/".$jday; ?>
همانطور که ملاحظه کردید از دستور date با آرگومان داده شده تاریخ
فعلی سیستم استخراج می شود و در همان روال توضیح داده شده تبدیل به
شمسی شده و در متغیر $jdate قرار می گیرد .
برای اینکه کارتان کمی ساده تر شود می توانید تابعی به شکل زیر
تعریف کنید :
<?php function
get_jalali_date( $gdate='now' ) {
if ( $gdate
== 'now'
) { list($gyear, $gmonth, $gday ) = preg_split ('/-/', date("Y-m-d")); } else { list( $gyear, $gmonth, $gday ) = preg_split ( '/-/', $gdate ); } list(
$jyear,
$jmonth,
$jday ) =
gregorian_to_jalali($gyear, $gmonth, $gday); return $jyear."/".$jmonth."/".$jday;
} ?>
تابعی با نام get_jalali_date تعریف کردیم که یک متغیر به عنوان
ورودی دریافت می کند که این همان تاریخ به میلادی است . در صوتیکه
هنگام صدا کردن این تابع تاریخ میلادی را به عنوان ورودی برای این
تابع وارد کرده باشید، تابع همان تاریخ را به شمسی تبدیل کرده و
در خروجی بر می گرداند، ولی اگر هیچ متغیری به عنوان ورودی به این
تابع ندهید، تاریخ همان لحظه را به شمسی برای شما در خروجی بر می
گرداند .
مثلا برای تبدیل همان تاریخ 2002-11-25 به شمسی و قرار دادن آن در
یک متغیر می توانیم با استفاده از تابع بالا اینگونه عمل کنیم
:
<?php $jdate =
get_jalali_date("2002-11-25");?>
و یا برای بدست آوردن تاریخ همین لحظه و قرار دادن آن در یک متغیر
اینگونه عمل می کنیم :
<?php $jdate =
get_jalali_date();?>
همانطور که می بینید کار بسیار ساده تر شد.
2- تبدیل تاریخ شمسی به میلادی :
با توضیحاتی مشابه می توانید از تابع jalali_to_gregorian استفاده
کنید . مانند تابع قبل این تابع هم سه متغیر به عنوان ورودی دریافت
می کند که عبارتند از سال، ماه و روز که همگی به شمسی هستند . سپس
در جواب آرایه ای شامل سه قسمت که سال، ماه و روز میلادی همان
تاریخ هستند را بر می گرداند .
برای نمونه اگر بخواهیم تاریخ 4/9/1381 را به میلادی تبدیل کنیم
کاری مشابه برنامه زیر انجام می دهیم :
<?php $jdate="1381/9/4"; list( $jyear, $jmonth, $jday ) = preg_split ( '///', $jdate ); list(
$gyear,
$gmonth,
$gday ) =
jalali_to_gregorian($jyear, $jmonth, $jday); $gdate = $gyear."-".$gmonth."-".$gday; ?>
تنها تفاومت موجود با تابع بالا استفاده از / برای جداسازی اجزاء
تاریخ شمسی می باشد . همانطور که گفتیم تابع preg_split آرگومان
اول خود که همان delimiter ( جدا کننده ) می باشد را به صورت
regex می گیرد که باید بین دو علامت / باشد ، در اینجا باید قبل /
که نشان دهنده کاراکتر delimiter ما می باشد یک \ (back slash )
قرار می دهیم که جداکننده مشخص باشد .
توضیح خاص دیگری هم ندارد و همانند تابع تبدیل میلادی به شمسی اینجا
هم می توانیم تابعی با نام get_gregorian_date بسازیم که کار را
راحتتر کند . ایجاد این تابع را به خواننده واگذار می کنم
J
با آرزوی توفیقات الهی
سید حمید رضا هاشمی گلپایگانی
دوشنبه 4 آذرماه 1381
|